/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.upc.dew.cobranzas.controller;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import pe.edu.upc.dew.cobranzas.dao.ContratoDao;
import pe.edu.upc.dew.cobranzas.dao.InquilinoDao;
import pe.edu.upc.dew.cobranzas.dao.PropiedadDao;
import pe.edu.upc.dew.cobranzas.model.Contrato;
import pe.edu.upc.dew.cobranzas.model.Inquilino;
import pe.edu.upc.dew.cobranzas.model.Propiedad;
import pe.edu.upc.dew.cobranzas.service.ContratoService;
import pe.edu.upc.dew.cobranzas.service.CuotaService;
import pe.edu.upc.dew.cobranzas.service.InquilinoService;
import pe.edu.upc.dew.cobranzas.service.PropiedadService;

/**
 *
 * @author Ivan
 */
public class ContratoServlet extends HttpServlet {

    private ContratoService contratoService;
    private CuotaService cuotaService;
    private InquilinoService inquilinoService;
    private PropiedadService propiedadService;

    public ContratoServlet() {
        this.contratoService = new ContratoService();
        this.cuotaService = new CuotaService();
        this.inquilinoService = new InquilinoService();
        this.propiedadService = new PropiedadService();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        try {
            if (request.getParameter("txtidContrato").equals("")) {
                HttpSession session = request.getSession();
                session.setAttribute("inquilinos", inquilinoService.Listado());
                session.setAttribute("propiedades", propiedadService.Listado());

            } else {
                int idContrato = Integer.parseInt(request.getParameter("txtidContrato"));
                String dniInquilino = request.getParameter("cmbinquilino");
                Integer idPropiedad = Integer.parseInt(request.getParameter("cmbpropiedad"));

                String fechaContrato = request.getParameter("txtfechaContrato");
                String fechaVencimiento = request.getParameter("txtfechaVencimiento");
                Double monto = Double.parseDouble(request.getParameter("txtmonto"));
                String moneda = request.getParameter("cmbmoneda");
                Double moraDiaria = Double.parseDouble(request.getParameter("txtmora"));

                //Inquilino
                InquilinoDao inquilinoDao = new InquilinoDao();
                Inquilino inquilino = new Inquilino();
                inquilino = inquilinoDao.getInquilinoPorDni(dniInquilino);

                //propiedad
                PropiedadDao propiedadDao = new PropiedadDao();
                Propiedad propiedad = new Propiedad();
                propiedad = propiedadDao.getPropiedadPorId(idPropiedad);

                contratoService.Registra(idContrato, inquilino, propiedad, fechaContrato, fechaVencimiento, monto, moneda, moraDiaria);
                //Ingresa Cronograma
                Contrato contrato = new Contrato();
                ContratoDao contratoDao = new ContratoDao();
                contrato = contratoDao.getContratoPorCodigo(idContrato);

                SimpleDateFormat fecha = new SimpleDateFormat("dd/MM/yyyy");
                Date dateini;

                dateini = fecha.parse(fechaContrato);

                Date datefin = fecha.parse(fechaVencimiento);
                long diff = datefin.getTime() - dateini.getTime();
                long meses = (diff / (1000 * 60 * 60 * 24)) / 30;

                for (int i = 1; i < meses; i++) {
                    cuotaService.Registra(i, fechaVencimiento, "Pendiente", contrato);
                }
                request.setAttribute("cantidad", Long.toString(meses));
           
            }



            request.setAttribute("contratos", contratoService.Listado());
            HttpSession session = request.getSession();
            session.setAttribute("cuotas", cuotaService.Listado());
            request.getRequestDispatcher("contratos.jsp").forward(request, response);

        } catch (ParseException ex) {
            Logger.getLogger(ContratoServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
